package com.atguigu.day1;

import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

public class NoteCourse {
    /*一、学习方法论
     * 拿到一个新技术如何入手开始自学
     * 如:JUC
     * 该技术是什么，一句话定义
     * 能干什么，搞定了那些痛点？
     * 去哪里下载，凡是技术必去官网.io
     * 怎么玩，常见的API和技术的掌握即可，不可能也必要掌握全部
     *永远的helloworld，入门demo  官网导航栏中的快速开始
     *
     * 概念复习
     * 1、进程/线程/管程/协程------》与操作系统相关
     *
     * 进程
     * 官话：进程是程序的一次执行，是系统进行资源分配和调度内存的单位，
     * 每一个进程都有它自己的内存空间和系统资源
     *人话：任务管理器中运行的一个程序就是一个进程
     *
     * 线程
     * 官话：在同一个进程内可以执行多个任务，而这每一个任务我们就可以看做是一个线程
     * 一个进程会有一个或多个线程
     *人话：所谓的线程(Thread)就是依附于进程(processor)中的一个任务
     * 如word软件 的进程winword.exe
     *有以下任务
     *1、check style语法检查的后台线程，有ERROR马上飘红
     * 2、首字母大写提示
     * 3、断电后的容灾备份savePoint
     *
     * 管程
     * 官话：执行线程要求先成功持有管程，然后才能执行方法，最后当方法完成（无论是否正常完成）时释放管程
     * 在方法执行期间，执行线程持有了管程，其他线程都无法获取到同一个管程
     * 人话：Monitor（监视器）也就是我们平时说的锁
     *
     *协程
     * 线程里面的线程之后讲
     *
     * 2、异步/同步
     *同步
     * 官话：在同同步操作中，任务按照顺序依次执行，每个任务必须等待前一个任务完成后才能开始执行。
     * 这意味这任务之间是连续的、有序，一个任务的完成通常会阻塞后续任务的执行，直到最前面的任务完成
     *
     * 人话：排队等阿姨打饭
     *
     *异步
     * 官话：在异步操作中，任务可以同时执行，而不需要等待前一个任务完成。任务的执行不按照固定顺序，
     * 任务可以随时开始和结束，任务之间是相互独立的
     *人话：你到餐厅点餐，服务员给你一个订单号，然后在餐食准备好之后通过这个订单号来“回调”通知你取餐
     *
     * 3、并发/并行
     *
     * 并发concurrent
     * 官话：是在同一个实体上的多个事件
     * 是在同一台处理器上“同时”处理多个任务
     * 同一时刻，其实是只有一个事件在发生
     * 人话：12306
     * 高并发一瞬间多个请求线程，打在同一个资源点上
     *
     * 并行parallel
     * 官话：是在不同实体的多个事件
     * 是在多台处理器上同时处理多个任务
     * 人话：烧水的同时在切菜，热水壶和菜刀两个处理器
     *
     *
     * 线程状态的回顾
     * 一个线程可以start两次吗?
     *异常java.lang.IllegalThreadStateException
     *答不可以，线程已经
      * A zero status value corresponds to state "NEW".

     * if (threadStatus != 0)
     throw new IllegalThreadStateException();
     * Thread.State
     * NEW 线程还未start时
     * RUNNABLE 线程已启动并且正在执行，或者线程准备好并等待CPU调度执行。
     * LOCKED 线程阻塞
     * WATTING 等待    不见不散
     * TIMEWAITING 定时等待 过时不候
     * TERMINATED 线程死亡
     *
     * */
    public static void main(String[] args) {
        Thread thread = new Thread();
        thread.start();


        /*thread.start();*/
//        Thread.State
//        AtomicBoolean atomicBoolean = new AtomicBoolean();
//        AtomicInteger atomicInteger = new AtomicInteger();
    }
}
